home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 7661 / 7661.xpi / chrome / isreaditlater.jar / content / RILshare.js < prev    next >
Text File  |  2009-10-12  |  12KB  |  393 lines

  1. function RILshare()
  2. {
  3.     
  4. }
  5. RILshare.prototype = {
  6.     
  7.     itemShareContext : function(menupopup)
  8.     {
  9.         /*
  10.         // move contents of share popup
  11.         let fromNodes = RIL.xul('share').childNodes;
  12.         let to = RIL.xul('item_shareContent')
  13.         if (to.childNodes.length < 2)
  14.         {
  15.             while( fromNodes[ 0 ] )
  16.             {
  17.                 to.appendChild( fromNodes[ 0 ] );
  18.             }
  19.         }*/
  20.     },
  21.     
  22.     populateShareMenu : function(fromContext, url)
  23.     {
  24.         // Get Lists
  25.         this.sortSites();
  26.         this.getTopList();
  27.         
  28.         let content = RIL.xul('shareContent' + (fromContext ? 'Context' : '') );
  29.         let moreContent = RIL.xul('shareMoreContent' + (fromContext ? 'Context' : '') );
  30.         let i, node;
  31.         
  32.     RIL.clearChildren( content );
  33.     RIL.clearChildren( moreContent );
  34.         
  35.         for(i in this.topSiteIds)
  36.         {
  37.             node = RIL.createNode('menuitem', {label:this.siteDirectory[this.topSiteIds[i]].name, siteId:this.topSiteIds[i], url:url?url:null});
  38.             node.onclick = this.shareSiteSelected;
  39.             content.appendChild( node );
  40.             if (i > 5) break;
  41.         }        
  42.         
  43.         let categoryContainers = {};
  44.         let menu;
  45.         
  46.         for(i in this.categories)
  47.         {
  48.             menu = RIL.createNode('menu', {label:this.categories[i]});
  49.             moreContent.appendChild( menu );
  50.             
  51.             categoryContainers[i] = RIL.createNode('menupopup', {position:'start_before'});
  52.             menu.appendChild( categoryContainers[i] );           
  53.         }
  54.         
  55.         let site, cats, j;
  56.         for(i in this.siteIndex)
  57.         {
  58.             site = this.siteIndex[i];
  59.             cats = typeof site.cat == 'object' ? site.cat : [site.cat];
  60.             
  61.             if (site.macOnly && !navigator.platform.match(/mac/i)) continue;
  62.             
  63.             for(j in cats)
  64.             {
  65.                 node = RIL.createNode('menuitem', {label:site.name, siteI:i, url:url?url:null});
  66.                 node.onclick = this.shareSiteSelected;
  67.                 categoryContainers[cats[j]].appendChild( node );
  68.             }
  69.         }
  70.     },
  71.     
  72.     // -- //
  73.     
  74.     sortSites : function()
  75.     {
  76.         if (this.sorted) return;
  77.         
  78.         let id;
  79.         this.siteIndex = [];
  80.         for(id in this.siteDirectory)
  81.         {
  82.             this.siteIndex.push( this.siteDirectory[id] );
  83.             this.siteDirectory[id].id = id;
  84.         }
  85.         
  86.         this.siteIndex.sort(this.sortByName);
  87.     },
  88.     
  89.     sortByName : function(a, b)
  90.     {
  91.         return a.name > b.name ? 1 : -1;  
  92.     },
  93.     
  94.     // -- //
  95.     
  96.     getTopList : function()
  97.     {        
  98.         RIL.APP.PREFS.setIfDoesNotExist('share-top-sites', 'delicious|twitter|facebook|google_reader|email');
  99.         let str = RIL.APP.PREFS.get('share-top-sites');
  100.         this.topSiteIds = str.split('|');
  101.     },
  102.     
  103.     moveSiteToTop : function(site)
  104.     {
  105.         let i = this.topSiteIds.indexOf( site.id );
  106.         
  107.         if (i >= 0)
  108.             this.topSiteIds.splice(i, 1);
  109.         
  110.         let str = site.id + '|' + this.topSiteIds.slice(0,5).join('|');
  111.         RIL.APP.PREFS.set('share-top-sites', str);
  112.     },
  113.     
  114.     // -- //
  115.     
  116.     shareSiteSelected : function(e)
  117.     {
  118.         let site;
  119.         if (this.getAttribute('siteId'))
  120.         {
  121.             site = RILshare.siteDirectory[ this.getAttribute('siteId') ];
  122.         } else {
  123.             site = RILshare.siteIndex[ this.getAttribute('siteI') ];
  124.         }
  125.         
  126.         RILshare.shareCurrentPageWithSite( site, this.getAttribute('url') ); 
  127.     },
  128.     
  129.     shareCurrentPageWithSite : function(site, url)
  130.     {        
  131.         let title;
  132.         if (!url)
  133.         {
  134.             url = RIL.currentURL(true);
  135.             title = RIL.currentTitle();
  136.         }
  137.         else {
  138.             let item = RIL.APP.LIST.itemByUrl(url);
  139.             title = item ? item.title : '';
  140.         }
  141.         
  142.         
  143.         // Basic - open url
  144.         if (site.url)
  145.         {
  146.             let shareurl = this.replaceUrlStringTags(site.url, url, title);
  147.             if (shareurl)
  148.                 RIL.openUrl(shareurl, false, site.sameTab ? 'current' : 'tab');                
  149.         }
  150.         
  151.         // Basic - run bookmarklet
  152.         else if (site.bookmarklet)
  153.         {
  154.             RIL.openUrl(site.bookmarklet);
  155.         }
  156.         
  157.         // Custom -
  158.         else
  159.         {
  160.             if (this['custom_'+site.id])
  161.                 this['custom_'+site.id](url, title);
  162.         }
  163.         
  164.         // Update top sites
  165.         this.moveSiteToTop( site );
  166.         
  167.     },
  168.     
  169.     replaceUrlStringTags : function(shareurl, url, title)
  170.     {
  171.         // Tags
  172.         // {!URL}
  173.         // {!TITLE}
  174.         // {!TEXT} - try to generate text for the page, then share
  175.         // {!SELECTION} - grab currently selected text
  176.         // {!SELECTIONTHENTEXT} - try to grab a selection and if it doesn't exist, grab the text view
  177.                
  178.         
  179.         shareurl = shareurl.replace('{!URL}', encodeURIComponent(url));        
  180.         shareurl = shareurl.replace('{!TITLE}', encodeURIComponent(title));
  181.         
  182.         let selectReplaced = false;
  183.         let selection = window.getSelection();
  184.         let text;
  185.         if (selection && selection.toString.length > 0)
  186.         {
  187.             text = RIL.APP.e(selection.toString);
  188.             shareurl = shareurl.replace('{!SELECTION}', text); 
  189.             shareurl = shareurl.replace('{!SELECTIONTHENTEXT}', text);
  190.             selectReplaced = true;
  191.         }       
  192.        
  193.         /*if (
  194.             ( shareurl.match('{!TEXT}') || (!selectReplaced && shareurl.match('{!SELECTIONTHENTEXT}') ) )
  195.             )
  196.         {
  197.             
  198.             
  199.             text = RIL.APP.e('Email text is not supported in beta 1.  It will be added in the next beta.');            
  200.             shareurl = shareurl.replace('{!SELECTIONTHENTEXT}', text);
  201.             shareurl = shareurl.replace('{!TEXT}', text);
  202.         }*/
  203.         
  204.         return shareurl;
  205.     },
  206.         
  207.         
  208.     // -- Special Cases -- //
  209.     
  210.     custom_Firefox : function(url, title)
  211.     {
  212.         window.top.PlacesCommandHook.bookmarkLink(PlacesUtils.bookmarksMenuFolderId, ril, title);
  213.     },
  214.     
  215.     custom_echofonff : function(url, title)
  216.     {
  217.         if (!gTwitterNotifier)
  218.         {
  219.             RIL.APP.PROMPT.alert(window, 'Cannot share', 'You do not have the Echofon Firefox extension installed');
  220.         }
  221.         else {
  222.             gTwitterNotifier.onInsertURL( url );
  223.         }
  224.     },
  225.     
  226.     // --- //
  227.     
  228.     
  229.     categories : [
  230.         'Applications',//0
  231.         'Bookmarks', //1
  232.         'News', //2
  233.         'Social Network', //3
  234.         'Posting' //4
  235.     ],
  236.     
  237.     siteDirectory : {
  238.         
  239.         // Custom
  240.         
  241.         'Firefox' : {
  242.             name    :'Firefox',
  243.             cat         :[0,1]
  244.         },
  245.     'twitter' : {
  246.             name    :'Twitter',
  247.             url         :'chrome://isreaditlater/content/twitter.html?url={!URL}&title={!TITLE}',
  248.             cat         :4
  249.     },
  250.         
  251.         
  252.         // URLs and bookmarklets
  253.         
  254.     'email' : {
  255.             name    :'Email',
  256.             url        :'mailto:?subject={!TITLE}&body={!URL}',
  257.             cat         :0,
  258.             sameTab     : true
  259.     },
  260.     'reddit' : {
  261.             name    :'Reddit',
  262.             url        :'http://reddit.com/submit?url={!URL}&title={!TITLE}',
  263.             cat         :2
  264.     },
  265.     'digg' : {
  266.             name    :'Digg',
  267.             url        :'http://digg.com/submit?phase=2&url={!URL}&title={!TITLE}',
  268.             cat         :2
  269.     },
  270.     'facebook' : {
  271.             name    :'Facebook',
  272.             url        :'http://www.facebook.com/share.php?u={!URL}',
  273.             cat         :3
  274.     },
  275.     'myspace' : {
  276.             name    :'MySpace',
  277.             url        :'http://www.myspace.com/Modules/PostTo/Pages/?l=3&u={!URL}&t={!TITLE}&c=',
  278.             cat         :3
  279.     },
  280.     'delicious' : {
  281.             name    :'Delicious',
  282.             url        :'http://del.icio.us/post?url={!URL}&title={!TITLE}',
  283.             cat         :1
  284.     },
  285.     'stumbleupon' : {
  286.             name    :'Stumbleupon',
  287.             url        :'http://www.stumbleupon.com/submit?url={!URL}&title={!TITLE}',
  288.             cat         :1
  289.     },
  290.     'ybuzz' : {
  291.             name    :'Yahoo Buzz',
  292.             url        :'http://buzz.yahoo.com/submit/?submitUrl={!URL}&submitHeadline={!TITLE}',
  293.             cat         :2
  294.     },
  295.     'mixx' : {
  296.             name    :'Mixx',
  297.             url        :'http://www.mixx.com/submit?page_url={!URL}',
  298.             cat         :2
  299.     },
  300.     'google_bmarks' : {
  301.             name    :'Google Bookmarks',
  302.             url        :'http://www.google.com/bookmarks/mark?op=edit&bkmk={!URL}&title={!TITLE}',
  303.             cat         :1
  304.     },
  305.         'google_reader' : {
  306.             name    :'Google Reader',
  307.             url        :'http://www.google.com/reader/link-frame?url={!URL}&srcUrl={!URL}&title={!TITLE}&srcTitle={!TITLE}',
  308.             cat         :2
  309.     },
  310.     'yahoo_bmarks' : {
  311.             name    :'Yahoo Bookmarks',
  312.             url        :'http://bookmarks.yahoo.com/toolbar/savebm?opener=tb&u={!URL}&t={!TITLE}',
  313.             cat         :1
  314.     },
  315.     'windows_live' : {
  316.             name    :'Windows Live',
  317.             url        :'https://favorites.live.com/quickadd.aspx?marklet=1&mkt=en-us&url={!URL}&title={!TITLE}&top=1',
  318.             cat         :1
  319.     },
  320.     'friendfeed' : {
  321.             name    :'FriendFeed',
  322.             url        :'http://friendfeed.com/share?url={!URL}&title={!TITLE}',
  323.             cat         :3
  324.     },
  325.     'newsvine' : {
  326.             name    :'Newsvine',
  327.             url        :'http://www.newsvine.com/_tools/seed&save?popoff=0&u={!URL}&h={!TITLE}',
  328.             cat         :2
  329.     },
  330.     'linkedin' : {
  331.             name    :'LinkedIn',
  332.             url        :'http://www.linkedin.com/shareArticle?mini=true&url={!URL}&title={!TITLE}&summary=&source=',
  333.             cat         :3
  334.     },
  335.     'slashdot' : {
  336.             name    :'Slashdot',
  337.             url        :'http://slashdot.org/bookmark.pl?url={!URL}&title={!TITLE}',
  338.             cat         :2
  339.     },
  340.     'diigo' : {
  341.             name    :'Diigo',
  342.             url        :'http://secure.diigo.com/post?url={!URL}&title={!TITLE}',
  343.             cat         :1
  344.     },
  345.     'tweetie' : {
  346.             name    :'Tweetie',
  347.             url        :'tweetie:{!TITLE} {!URL}',
  348.             macOnly     :true,
  349.             cat         :[0,4],
  350.             sameTab     : true
  351.     },
  352.     'echofonmac' : {
  353.             name    :'Echofon Mac',
  354.             url        :'echofon:{!TITLE} {!URL}',
  355.             macOnly     :true,
  356.             cat         :[0,4],
  357.             sameTab     : true
  358.     },
  359.     'echofonff' : {
  360.             name    :'Echofon Firefox',
  361.             cat         :[0,4]
  362.     },
  363.     'evernote' : {
  364.             name    :'Evernote',
  365.             url        :'http://evernote.com/clip.action?url={!URL}&title={!TITLE}',
  366.             cat         :1
  367.     },
  368.         
  369.         'Connotea' : {
  370.             name    :'Connotea',
  371.             url        :'http://www.connotea.org/add?continue=return&uri={!URL}&title={!TITLE}',
  372.             cat         :1
  373.         },
  374.         
  375.         'bitly' : {
  376.             name    :'Bit.ly',
  377.             domain      :'bit.ly',
  378.             url     :"http://bit.ly/?url={!URL}",
  379.             cat         :4
  380.         },
  381.         
  382.         'posterous' : {
  383.             name        :'Posterous',
  384.             domain      :'posterous.com',
  385.             url         :"http://ping.fm/ref/?method=microblog&title='+{!TITLE}+'&link='+{!URL}+'&body='+{!SELECTION}",
  386.             cat         :4
  387.         }
  388.         
  389.     }
  390. }
  391.  
  392.  
  393. RILshare = new RILshare();